package CreateThread;

class MyThread extends Thread{
    @Override
    public void run() {
        while (true) {
            System.out.println("hello world");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
public class Method1 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new MyThread();
        //start创建一个线程,由新的线程来执行run方法
        /*
        start是真正创建了一个线程(从系统这里创建的),线程是独立的执行流,而如果只是通过引用调用run()方法,没有创建新线程,就全是main线程一个人干活
         */
        t.start();
        //如果只是打印hello world java进程主要就是有一个线程(调用main方法的线程:主线程)
        //而t.start(),主线程会通过这个调用创建一个新的线程,新的线程来执行t.run(),如果run方法执行完,新的线程自然销毁

        /*
         操作系统调度线程的时候,是"抢占式执行" 具体哪个线程先执行,不确定,取决于操作系统调度器具体实现策略
         虽然线程存在优先级,但是在应用程序上无法修改,从应用程序(代码)的角度,看到的效果是:线程之间的调度是随机的一样(内核里本身不是随机的,
         但是干预因素太多,只能认为是随机的了)
         */
        while (true) {
            System.out.println("hello main");
            Thread.sleep(1000);
        }
    }
}

